package com.yang.qqclient.service;

import com.yang.common.Message;
import com.yang.common.MessageType;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;

/**
 * @Description: 客户端的通信线程类
 * @Author: YANG QIANG
 * @Time: 2022-12-20 21:00
 */
public class ClientConnectServerThread extends Thread {
    // 该线程需要持有socket
    private Socket socket;

    public ClientConnectServerThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        // 线程需在后台和服务器通信, 所以需要无限循环
        while (true){
            try {
                System.out.println("客户端线程, 等待读取服务端发送的数据..");
                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                // 如果服务器没有发送消息, 那么会阻塞在这里
                Message message = (Message)ois.readObject();

                // 判断消息的类型, 然后做响应的业务
                String messageType = message.getMessageType();

                // 服务器端返回的在线用户列表
                if (MessageType.MESSAGE_RET_ONLINE_FRIEND.equals(messageType)) {
                    String[] onlineUsers = message.getContent().split(" ");
                    System.out.println("==========当前在线用户列表==========");
                    for (int i = 0; i < onlineUsers.length; i++) {
                        System.out.println("用户: " + onlineUsers[i]);
                    }
                }

                // 处理接收到的私聊消息
                if (MessageType.MESSAGE_C0MM_MES.equals(messageType)) {
                    // 展示到控制台
                    System.out.println("\n" + "时间: " + message.getSendTime() + ": \n" +
                            message.getSender() + "对 " + message.getGetter() + "说: " + message.getContent());
                }

                // 处理接收到的群发消息
                if (MessageType.MESSAGE_C0MM_MES_TO_ALL.equals(messageType)) {
                    // 展示到控制台
                    System.out.println("\n" + "时间: " + message.getSendTime() + ": \n" +
                            message.getSender() + "对大家说: " + message.getContent());
                }

                // 处理接收到的文件消息
                if (MessageType.MESSAGE_FILE_MES.equals(messageType)) {
                    System.out.println("接收到" + message.getSender() + "发送的文件, 自动保存到:" + message.getFileDestPath());

                    // 取出文件写入磁盘
                    FileOutputStream fileOutputStream = new FileOutputStream(message.getFileDestPath());
                    fileOutputStream.write(message.getFileBytes());
                    fileOutputStream.close();
                    System.out.println("保存文件成功");
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

    public Socket getSocket() {
        return socket;
    }

    public void setSocket(Socket socket) {
        this.socket = socket;
    }
}
